class ItemMovimiento < ActiveRecord::Base
  belongs_to :movimiento_almacen
  
  validates_numericality_of :cantidad, :only_integer => true, :greater_than => 0
  validates_presence_of :producto_id, :unidad_medida_id
  
  after_save :item_guardado
  
  def unidad_medida
    UnidadMedida::UNIDADES_MEDIDA.invert[unidad_medida_id]
  end
  
  def item_guardado
    # buscar existencia producto
    existencia = movimiento_almacen.almacen.existencias.find(:first,
      :conditions => {:producto_id => producto_id, :unidad_medida_id => unidad_medida_id})
        
    unless existencia.nil?
      # si existe, aplicar movimiento (entrada/salida)
      case movimiento_almacen.tipo_movimiento_id
      when MovimientoAlmacen::ENTRADA
        existencia.aumentar(cantidad)
        
      when MovimientoAlmacen::SALIDA
        existencia.disminuir(cantidad)
      end
      
    else
      # si no existe, crear existencia y despues aplicar movimiento (entrada/salida)
      movimiento_almacen.almacen.existencias << Existencia.new(:producto_id => producto_id,
        :unidad_medida_id => unidad_medida_id, :cantidad => cantidad,
        :user_id => movimiento_almacen.user_id)
      
    end
  end
end
